﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Kaskelot.SP.Core;
using Kaskelot.SP.Model.Client.Forms;

namespace Kaskelot.SP.Services.Client.Mapping
{
	public static class ClientBemanningValdistriktExtensions
	{
		public static ClientBemanningValdistrikt ToClientContract(this BemanningValdistrikt entity)
		{
			ClientBemanningValdistrikt b = new ClientBemanningValdistrikt();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static ClientBemanningValdistrikt ToMinimalClientContract(this BemanningValdistrikt entity)
		{
			ClientBemanningValdistrikt b = new ClientBemanningValdistrikt();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static BemanningValdistrikt ToContract(this ClientBemanningValdistrikt b)
		{
			BemanningValdistrikt entity = new BemanningValdistrikt();

			CopyToEntity(b, entity);

			return entity;
		}

		public static BemanningValdistrikt UpdateContract(this BemanningValdistrikt bemanningvaldistrikt, BemanningValdistriktForm form)
		{
			if (bemanningvaldistrikt.Id == Guid.Empty)
			{
				bemanningvaldistrikt.Id = Guid.NewGuid();
			}
			bemanningvaldistrikt.FunktionId = new Guid(form.FunktionId);
			bemanningvaldistrikt.ValdistriktId = new Guid(form.ValdistriktId);

			return bemanningvaldistrikt;
		}

		private static void CopyFromEntity(BemanningValdistrikt from, ClientBemanningValdistrikt to, bool minimal)
		{
			to.Id = from.Id.ToString();
			to.ValId = from.ValId.ToString();

			to.Andrad = from.Andrad != null ? from.Andrad.ToString() : null;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad != null ? from.Skapad.ToString() : null;
			to.SkapadAv = from.SkapadAv;

			to.FunktionId = from.FunktionId.ToString();
			to.FunktionNamn = from.FunktionNamn;
			to.PersonId = from.PersonId.HasValue ? from.PersonId.ToString() : null;
			to.PersonNamn = from.PersonNamn;
			to.PersonPersonnummer = from.PersonPersonnummer;
			to.ValdistriktId = from.ValdistriktId.ToString();
			to.ValdistriktNamn = from.ValdistriktNamn;
			to.PersonEpost = from.PersonEpost;

			to.TackatJa = from.TackatJa.ToKlarEjKlar();

			to.MilErsattning = from.MilErsattning.ToString();
			to.TaxiUtlagg = from.TaxiUtlagg.ToString();
		}

		private static void CopyToEntity(ClientBemanningValdistrikt from, BemanningValdistrikt to)
		{
			to.Id = new Guid(from.Id);
			to.ValId = new Guid(from.ValId);

			if (!String.IsNullOrEmpty(from.Andrad))
				to.Andrad = DateTime.Parse(from.Andrad);
			else
				to.Andrad = null;

			to.AndradAv = from.AndradAv;

			if (from.Skapad != null)
				to.Skapad = DateTime.Parse(from.Skapad);

			to.SkapadAv = from.SkapadAv;

			to.FunktionId = new Guid(from.FunktionId);
			to.FunktionNamn = from.FunktionNamn;
			if(from.PersonId.IsGuid())
				to.PersonId = new Guid(from.PersonId);
			to.PersonNamn = from.PersonNamn;
			to.ValdistriktId = new Guid(from.ValdistriktId);
			to.ValdistriktNamn = from.ValdistriktNamn;

			to.TackatJa = from.TackatJa.FromKlarEjKlar();

			to.MilErsattning = Double.Parse(from.MilErsattning);
			to.TaxiUtlagg = Double.Parse(from.TaxiUtlagg);
		}
	}
}
